<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 面向对象的最终语法之一
  // 属性写在类（构造函数）内
  function CreateObj(name, age){
    this.name = name;
    this.age = age;
  }
  // 方法写在接口规范（原型对象）上
  CreateObj.prototype.show = function(){
    console.log(this.name);
  }

  // 接口规范约束了类的功能
  // 类约束了实例的属性

  // 将类实例化成具体的对象（实例是类的具象）
  const o1 = new CreateObj("admin" , 18);
  const o2 = new CreateObj("root" , 20);

  o1.show();
  o2.show();

  console.log(o1 === o2);
  console.log(o1.show === o2.show);

  // new的原理
  // 1. 创建一个新对象
  // 2. 改变原函数的this指向，指向这个新对象
  // 3. 修改了这个新对象的原型指向，指向了函数的prototype
  // 4. 执行原函数
  // 5. 检测原函数是否主动返回对象，如果没有，那就将新对象（this）设置为返回值

  
</script>
</html>